/*
 * 获取图片相对路径
 * 使用方法：
 * 修改 config.path  config.outPath 属性
 * 然后运行：node imgPath.js
 * 即可生成包含指定目录下的文件相对路径文档
 *
 * */

const fs = require('fs')
const Path = require('path')

const config = {
  path: './img',            // 需要得到子文件列表的目录的路径，相对于该js文件
  outPath: './shijiu.html', // 要引入这些子文件的html所在的路径，相对于该js文件
}

const outFile = './imageUrl.txt' // 生成 文件路径列表 的文件的路径及名称

start()

function start()  {
  fs.readdir(config.path, (err) => {
    if (!err) {
      let filesPath = travel(config.path);
      let cacheStr = ''
      filesPath.forEach(m => {
        // 每个目录分开放
        if (m.type === 'dir') {
          cacheStr += '<h5>' + m.name + '</h5>' + '\n'
        } else if (m.type === 'file') {
          m.path = m.path.replace(/\\/g, '/')
          cacheStr += '<img src="' + m.path + '" />' + '\n'
        }
      })

      // 生成文件并写入配置
      fs.writeFileSync(outFile, cacheStr)
    } else {
      console.log(err)
    }
  });
}

// 获取目录下的所有文件的路径 (仅限文件，不会记录目录)
function travel(path) {

  let filePath = [] // 文件路径列表

  // 递归方式
  function next(p) {
    try {
      fs.readdirSync(p).forEach(name => {
        let pathStr = p + '/' + name
        if (fs.statSync(pathStr).isDirectory()) { // 目录
          filePath.push({ type: 'dir', path: pathStr, name: name })
          next(pathStr)
        }
        else if (fs.statSync(pathStr).isFile()) { // 文件
          let relativePath = Path.relative(Path.resolve(config.outPath), Path.resolve(pathStr))
          filePath.push({ type: 'file', path: relativePath, name: name })
        }
      })
    }
    catch (e) {
      console.log(e)
    }
  }
  next(path)

  // 循环方式
  // let catalog = [{ type: 'dir', path: path, name: '根目录' }]
  // while (catalog.length) {
  //   try {
  //     // 记住子目录
  //     filePath.push({ type: 'dir', path: catalog[0].path, name: catalog[0].name })
  //
  //     fs.readdirSync(catalog[0].path).forEach(name => {
  //       let pathStr = catalog[0].path + '/' + name
  //
  //       if (fs.statSync(pathStr).isDirectory()) {
  //         // 目录
  //         catalog.push({ type: 'dir', path: pathStr, name: name })
  //       } else if (fs.statSync(pathStr).isFile()) {
  //         // 记住子文件
  //         let relativePath = Path.relative(Path.resolve(config.outPath), Path.resolve(pathStr))
  //         filePath.push({ type: 'file', path: relativePath, name: name })
  //       }
  //     })
  //
  //     catalog.splice(0, 1)
  //   } catch (e) {
  //     catalog.splice(0, 1)
  //     break
  //   }
  // }

  return filePath
}
